package org.example.Tools;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * MD5 加密工具类
 */
public class MD5Util {

    /**
     * 对输入的字符串进行 MD5 加密
     * @param input 需要加密的字符串
     * @return MD5 加密后的 32 位十六进制字符串
     */
    public static String md5(String input) {
        try {
            // 创建 MD5 MessageDigest 实例
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 计算 MD5 哈希值
            byte[] digest = md.digest(input.getBytes());

            // 将字节数组转换为 32 位十六进制字符串
            return bytesToHex(digest);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("MD5 加密失败", e);
        }
    }

    /**
     * 将字节数组转换为十六进制字符串
     * @param bytes 字节数组
     * @return 十六进制字符串
     */
    private static String bytesToHex(byte[] bytes) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : bytes) {
            // 转换为 2 位十六进制表示
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) {
                hexString.append('0'); // 确保长度为 2
            }
            hexString.append(hex);
        }
        return hexString.toString();
    }

//
//    // 测试方法
//    public static void main(String[] args) {
//        String password = "123456";
//        String md5Hash = md5(password);
//        System.out.println("MD5加密后：" + md5Hash); // e10adc3949ba59abbe56e057f20f883e
//    }
}
